import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import { useUserStore } from '@/stores/user'

// 静态路由
export const constantRoutes: RouteRecordRaw[] = [
  {
    path: '/login',
    name: 'Login',
    component: () => import('@/views/Login.vue'),
    meta: { 
      requiresAuth: false // 允许未登录用户访问登录页
    }
  },
  {
    path: '/',
    name: 'Layout',
    component: () => import('@/layouts/MainLayout.vue'),
    meta: { requiresAuth: true },
    children: [
      {
        path: '',
        redirect: '/dashboard'
      },
      {
        path: 'dashboard',
        name: 'Dashboard',
        component: () => import('@/views/Dashboard.vue')
      }
    ]
  },
  // 添加一个默认重定向，确保根路径能正确重定向
  {
    path: '/:pathMatch(.*)*',
    redirect: '/dashboard'
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes: constantRoutes
})

// 全局前置守卫
router.beforeEach(async (to, from, next) => {
  const userStore = useUserStore()
  
  console.log('导航守卫触发:', {
    to: to.path,
    from: from.path,
    hasToken: !!userStore.token,
    tokenValue: userStore.token?.substring(0, 10) + '...',
    hasUserInfo: !!userStore.userInfo,
    routesLoaded: userStore.routesLoaded
  })
  
  // 不需要登录的页面，直接放行
  if (to.meta.requiresAuth === false) {
    console.log('无需认证页面，直接放行:', to.path)
    next()
    return
  }
  
  // 如果用户已登录（token存在且不为空）
  if (userStore.token && userStore.token.trim() !== '') {
    console.log('检测到token，验证用户状态...')
    
    // 避免在登录页无限重定向 - 直接跳转到dashboard
    if (to.path === '/login') {
      console.log('已在登录页，跳转到dashboard')
      next('/dashboard')
      return
    }
    
    // 如果已经加载过路由，直接放行
    if (userStore.routesLoaded) {
      console.log('路由已加载，直接放行')
      next()
    } else {
      // 首次加载路由 - 确保获取用户菜单并加载动态路由
      console.log('首次加载路由，开始获取用户信息...')
      try {
        // 先获取用户信息（如果需要）
        if (!userStore.userInfo) {
          console.log('获取用户信息...')
          const userInfoResult = await userStore.getUserInfoAction()
          console.log('用户信息获取结果:', userInfoResult)
          
          if (!userInfoResult.success) {
            if ((userInfoResult as any).code === 401) {
              console.error('Token无效或已过期，需要重新登录')
              userStore.logoutAction()
              next('/login')
              return
            }
            throw new Error('获取用户信息失败: ' + userInfoResult.message)
          }
        }
        
        // 加载用户路由（包含获取菜单）
        console.log('开始加载用户路由...')
        const loadResult = await userStore.loadUserRoutes()
        console.log('路由加载结果:', loadResult)
        if (!loadResult.success) {
          throw new Error('加载路由失败: ' + loadResult.message)
        }
        
        // 确保路由加载完成后继续当前导航
        console.log('路由加载完成，继续导航到:', to.path)
        if (to.path === '/' || to.path === '/dashboard') {
          next('/dashboard')
        } else {
          // 使用 replace 避免历史记录问题
          next({ ...to, replace: true })
        }
      } catch (error) {
        console.error('加载用户路由失败:', error)
        console.error('清除token并跳转到登录页')
        userStore.logoutAction()
        next('/login')
      }
    }
  } else {
    console.log('未检测到token，跳转到登录页')
    // 没有token，且不是登录页，跳转到登录页
    if (to.path !== '/login') {
      next('/login')
    } else {
      next()
    }
  }
})

export default router